package com.smart.common.service;

import com.smart.common.enums.ManageModuleEnum;
import com.smart.common.enums.OperateModuleEnum;
import com.smart.common.enums.OperateTypeEnum;
import com.smart.common.enums.PlatformEnum;
import com.smart.common.enums.ServiceModuleEnum;
import com.smart.common.enums.SuperviseModuleEnum;
import com.smart.context.SessionContext;
import com.smart.model.domain.OperateLogDO;
import org.springframework.stereotype.Component;

/**
 * @author macbook
 */
@Component
public class LogService {

    /**
     * 记录运营管理平台操作日志(新增场景)
     * @param module 业务模块
     * @param operateType 操作类型
     * @param bizId 业务数据id
     * @param afterContent 更新后内容
     * @return
     */
    public boolean logOperatePlatformAddScene(OperateModuleEnum module, OperateTypeEnum operateType, Long bizId, String afterContent) {
        return logOperatePlatform(module, operateType,  bizId, null, afterContent);
    }

    /**
     * 记录运营管理平台操作日志
     * @param module 业务模块
     * @param operateType 操作类型
     * @param bizId 业务数据id
     * @param beforeContent 更新前内容
     * @param afterContent 更新后内容
     * @return
     */
    public boolean logOperatePlatform(OperateModuleEnum module, OperateTypeEnum operateType, Long bizId, String beforeContent, String afterContent) {
        return logOperatePlatform(module, operateType,  bizId, beforeContent,afterContent, null);
    }

    /**
     * 记录运营管理平台操作日志
     * @param module 业务模块
     * @param operateType 操作类型
     * @param bizId 业务数据id
     * @param beforeContent 更新前内容
     * @param afterContent 更新后内容
     * @param description 自定义描述
     * @return
     */
    public boolean logOperatePlatform(OperateModuleEnum module, OperateTypeEnum operateType, Long bizId, String beforeContent, String afterContent, String description) {
        OperateLogDO log = new OperateLogDO();
        log.setPlatform(PlatformEnum.运营管理平台.name());
        log.setModule(module.name());
        log.setType(operateType.name());
        log.setBizId(bizId);
        log.setDescription(description);
        log.setIp(SessionContext.getIp());
        log.setBeforeContent(beforeContent);
        log.setAfterContent(afterContent);
        return true;
    }

    /**
     * 记录云管理平台操作日志(新增场景)
     * @param module 业务模块
     * @param operateType 操作类型
     * @param bizId 业务数据id
     * @param afterContent 更新后内容
     * @return
     */
    public boolean logManagePlatform(ManageModuleEnum module, OperateTypeEnum operateType, Long bizId, String afterContent) {
        return logManagePlatform(module, operateType, bizId, null, afterContent, null);
    }

    /**
     * 记录云管理平台操作日志
     * @param module 业务模块
     * @param operateType 操作类型
     * @param bizId 业务数据id
     * @param beforeContent 更新前内容
     * @param afterContent 更新后内容
     * @return
     */
    public boolean logManagePlatform(ManageModuleEnum module, OperateTypeEnum operateType, Long bizId, String beforeContent, String afterContent) {
        return logManagePlatform(module, operateType, bizId, beforeContent, afterContent, null);
    }

    /**
     * 记录云管理平台操作日志
     * @param module 业务模块
     * @param operateType 操作类型
     * @param bizId 业务数据id
     * @param beforeContent 更新前内容
     * @param afterContent 更新后内容
     * @param description 自定义描述
     * @return
     */
    public boolean logManagePlatform(ManageModuleEnum module, OperateTypeEnum operateType, Long bizId, String beforeContent, String afterContent, String description) {
        OperateLogDO log = new OperateLogDO();
        log.setPlatform(PlatformEnum.云管理平台.name());
        log.setModule(module.name());
        log.setType(operateType.name());
        log.setBizId(bizId);
        log.setDescription(description);
        log.setIp(SessionContext.getIp());
        log.setBeforeContent(beforeContent);
        log.setAfterContent(afterContent);
        return true;
    }

    /**
     * 记录云服务平台操作日志(新增场景)
     * @param module 业务模块
     * @param operateType 操作类型
     * @param bizId 业务数据id
     * @param afterContent 更新后内容
     * @return
     */
    public boolean logServicePlatform(ServiceModuleEnum module, OperateTypeEnum operateType, Long bizId, String afterContent) {
        return logServicePlatform(module, operateType, bizId, null, afterContent, null);
    }

    /**
     * 记录云服务平台操作日志
     * @param module 业务模块
     * @param operateType 操作类型
     * @param bizId 业务数据id
     * @param beforeContent 更新前内容
     * @param afterContent 更新后内容
     * @return
     */
    public boolean logServicePlatform(ServiceModuleEnum module, OperateTypeEnum operateType, Long bizId, String beforeContent, String afterContent) {
        return logServicePlatform(module, operateType, bizId, beforeContent, afterContent);
    }

    /**
     * 记录云服务平台操作日志
     * @param module 业务模块
     * @param operateType 操作类型
     * @param bizId 业务数据id
     * @param beforeContent 更新前内容
     * @param afterContent 更新后内容
     * @param description 自定义描述
     * @return
     */
    public boolean logServicePlatform(ServiceModuleEnum module, OperateTypeEnum operateType, Long bizId, String beforeContent, String afterContent, String description) {
        OperateLogDO log = new OperateLogDO();
        log.setPlatform(PlatformEnum.云服务平台.name());
        log.setModule(module.name());
        log.setType(operateType.name());
        log.setBizId(bizId);
        log.setDescription(description);
        log.setIp(SessionContext.getIp());
        log.setBeforeContent(beforeContent);
        log.setAfterContent(afterContent);
        return true;
    }

    /**
     * 记录监管平台操作日志(新增场景)
     * @param module 业务模块
     * @param bizId 业务数据id
     * @param afterContent 更新后内容
     * @return
     */
    public boolean logSupervisePlatformAddScene(SuperviseModuleEnum module, Long bizId, String afterContent) {
        return logSupervisePlatform(module, OperateTypeEnum.新建, bizId, null, afterContent);
    }

    /**
     * 记录监管平台操作日志(新增场景)
     * @param module 业务模块
     * @param bizId 业务数据id
     * @param beforeContent 更新前内容
     * @param afterContent 更新后内容
     * @return
     */
    public boolean logSupervisePlatformUpdateScene(SuperviseModuleEnum module, Long bizId, String beforeContent, String afterContent) {
        return logSupervisePlatform(module, OperateTypeEnum.修改, bizId, beforeContent, afterContent);
    }

    /**
     * 记录监管平台操作日志
     * @param module 业务模块
     * @param operateType 操作类型
     * @param bizId 业务数据id
     * @param beforeContent 更新前内容
     * @param afterContent 更新后内容
     * @return
     */
    public boolean logSupervisePlatform(SuperviseModuleEnum module, OperateTypeEnum operateType, Long bizId, String beforeContent, String afterContent) {
        return logSupervisePlatform(module, operateType, bizId, beforeContent, afterContent, null);
    }

    /**
     * 记录监管平台操作日志
     * @param module 业务模块
     * @param operateType 操作类型
     * @param bizId 业务数据id
     * @param beforeContent 更新前内容
     * @param afterContent 更新后内容
     * @param description 自定义描述
     * @return
     */
    public boolean logSupervisePlatform(SuperviseModuleEnum module, OperateTypeEnum operateType, Long bizId, String beforeContent, String afterContent, String description) {
        OperateLogDO log = new OperateLogDO();
        log.setPlatform(PlatformEnum.云监管平台.name());
        log.setModule(module.name());
        log.setType(operateType.name());
        log.setIp(SessionContext.getIp());
        log.setBizId(bizId);
        log.setDescription(description);
        log.setBeforeContent(beforeContent);
        log.setAfterContent(afterContent);
        return true;
    }
}
